package com.hsgene.shoppingcar.service;

import com.hsgene.common.util.support.LimitHelper;
import com.hsgene.common.util.support.Pagination;
import com.hsgene.coupon.dto.GeneticUserDiscountDto;
import com.hsgene.order.domain.applets.AppletsOrderPackageInfoDto;
import com.hsgene.product.dto.wechat.SimpleCommodityDto;
import com.hsgene.shoppingcar.condition.GeneticTestingOrderCarCondition;
import com.hsgene.shoppingcar.domain.GeneticTestingOrderCar;
import com.hsgene.shoppingcar.dto.DiscountDto;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @description:
 * @projectName: hdas-geneshop-server
 * @package: com.hsgene.shoppingcar.service
 * @author: maodi
 * @createDate: 2018/10/15 10:48
 * @version: 1.0
 * Copyright: Copyright (c) 2018
 */
public interface GeneticTestingOrderCarService {

    /**
     * @param userId   用户id
     * @param userType 用户类型
     * @return int
     * @description 获取购物车商品数量
     * @author maodi
     * @createDate 2018/10/17 13:40
     */
    int getShoppingCarCommodityCount(String userId, Integer userType);

    /**
     * @param userId 用户id
     * @return int
     * @description 获取购物车每个商品数量加起来值
     * @author maodi
     * @createDate 2018/10/25 9:04
     */
    int getShoppingCarCommodityAmount(String userId);

    /**
     * @param userId      用户id
     * @param limitHelper 分页条件
     * @param userType    用户类型
     * @return com.hsgene.common.util.support.Pagination<com.hsgene.product.dto.wechat.SimpleCommodityDto>
     * @description 查询当前购物车商品简要信息列表
     * @author maodi
     * @createDate 2018/10/17 11:56
     */
    Pagination<SimpleCommodityDto> getShoppingCarCommodityList(String userId, LimitHelper limitHelper, Integer
            userType);

    /**
     * @param userId 用户id
     * @param ids    商品id数组
     * @return java.util.List<com.hsgene.product.dto.wechat.SimpleCommodityDto>
     * @description 根据商品id数组获取购物车商品信息
     * @author maodi
     * @createDate 2018/10/17 15:00
     */
    List<SimpleCommodityDto> getShoppingCarCommodityListByIds(String userId, String[] ids);

    /**
     * @param userId        用户id
     * @param ids           商品id数组
     * @param isShoppingCar 是否从购物车购买
     * @return java.util.Map<java.lang.String,java.lang.Object>
     * @description 根据商品id数组获取购物车商品结算信息
     * @author maodi
     * @createDate 2018/10/17 15:17
     */
    Map<String, Object> getShoppingCarCommodityBalanceByIds(String userId, String[] ids, String isShoppingCar);

    /**
     * @param packageId 商品id
     * @param userId    用户id
     * @return int
     * @description 根据商品id和用户id查找数量
     * @author maodi
     * @createDate 2018/10/15 13:37
     */
    int getCountByPackageIdAndUserId(String packageId, String userId);

    /**
     * @param geneticTestingOrderCarCondition 购物车查询条件
     * @return java.util.List<com.hsgene.shoppingcar.domain.GeneticTestingOrderCar>
     * @description 根据用户id获取购物车列表信息
     * @author maodi
     * @createDate 2018/10/15 10:44
     */
    List<GeneticTestingOrderCar> getGeneticTestingOrderCarByUserId(GeneticTestingOrderCarCondition
                                                                           geneticTestingOrderCarCondition);

    /**
     * @param userId 用户id
     * @param id     购物车id
     * @return com.hsgene.shoppingcar.domain.GeneticTestingOrderCar
     * @description 根据用户id和购物车id查询购物车信息
     * @author maodi
     * @createDate 2018/10/18 13:38
     */
    GeneticTestingOrderCar getGeneticTestingOrderCarById(String userId, String id);

    /**
     * @param geneticTestingOrderCar
     * @return void
     * @description 新增购物车信息
     * @author maodi
     * @createDate 2018/10/15 10:44
     */
    void insertGeneticTestingOrderCar(GeneticTestingOrderCar geneticTestingOrderCar);

    /**
     * @param id         购物车表主键id
     * @param deleteType 删除类型（0手动删除 1购物车结算删除）
     * @param date       更新时间
     * @return void
     * @description 根据id删除购物车信息
     * @author maodi
     * @createDate 2018/10/15 10:44
     */
    void deleteGeneticTestingOrderCar(String id, int deleteType, Date date);

    /**
     * @param userId  用户id
     * @param id      购物车表主键id
     * @param checked 购物车表数据是否勾选
     * @param date    更新时间
     * @return void
     * @description 更新购物车表数据是否勾选
     * @author maodi
     * @createDate 2018/10/15 11:54
     */
    void updateChecked(String userId, String id, int checked, Date date);

    /**
     * @param checked 购物车表数据是否勾选
     * @param userId  用户id
     * @param ids     购物车表主键id数组
     * @return void
     * @description 批量更新购物车勾选状态
     * @author maodi
     * @createDate 2018/12/29 11:16
     */
    void updateCheckedMulti(int checked, String userId, String[] ids);

    /**
     * @param userId 用户id
     * @param ids    商品id数组
     * @return java.util.List<com.hsgene.order.domain.applets.AppletsOrderPackageInfoDto>
     * @description 根据商品id数组获取小程序订单商品信息
     * @author maodi
     * @createDate 2018/10/18 11:27
     */
    List<AppletsOrderPackageInfoDto> getAppletsOrderPackageInfoDtosByIds(String userId, String[] ids);

    /**
     * @param userId        用户id
     * @param ids           商品id数组
     * @param isShoppingCar 是否从购物车购买
     * @return java.util.List<com.hsgene.coupon.dto.GeneticDiscountDto>
     * @description 获取购物车优惠券列表
     * @author maodi
     * @createDate 2018/11/15 15:02
     */
    List<GeneticUserDiscountDto> getShoppingCarDiscounts(String userId, String[] ids, String isShoppingCar);

    /**
     * @param id     优惠券id
     * @param price  价格
     * @param userId 用户id
     * @return com.hsgene.shoppingcar.dto.DiscountDto
     * @description 查询优惠券信息
     * @author maodi
     * @createDate 2019/1/2 19:05
     */
    DiscountDto queryDiscountInfo(String id, Double price, String userId);

    /**
     * @param ids
     * @return java.lang.Integer
     * @description 根据商品id获取是否有下架的商品
     * @author maodi
     * @createDate 2019/1/7 21:15
     */
    Integer queryShelfDownCount(String[] ids);
}
